package bbalgae.swing.outline;

import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

/** 800*600
 * JDialog JDialog는 대화상자를 나타냄 이것을 이용해서 메시지를 표시하거나 사용자 입엵을 받을 수 있음.
 * 
 * 대화상자는 modal 또는 modaless 일 수 있음. modal : 대화상자가 표시된 후 다른 Frame의 사용자 입력을 차단함 즉,
 * modal 상자를 닫기 전까지는 다른 Frame을 선택하기 어려움
 * 
 * modaless : 사용자 입력을 막지 않는 대화 상자 특정 Frame을 선택하더라도 다른 Frame이 화면에서 사리지지 않음
 * 
 * Frame의 일부를 대화상자를 제어하려면 JDialog 생성자에 JFrame객체를 매개변수로 넘겨야 한다. 이런 경우 Frame이 파괴되면
 * 대화상자도 같이 닫힘
 * 
 * ModalityType 
 * 대화상자의 모달속성을 좀더 세밀하게 제어함
 * 모달 대화상자를 표시할때 사용자의 입력을 어느 범위까지 거부(blocking)할것인지 여부 지정
 * MODELESS : 단순히 부모 Frame의 제어를 받는 대화상자. 사용자의 입력을받음
 * DOCUMENT_MODAL : 모달 대화상자 단순히 현재 창만을 대상으로만 사용자 입력을 거부 함.
 * APPLICATION_MODAL : 모달 대화상자 광범위하게 모든 창을 대상으로 사용자 입력을 거부 함.
 */
public class J11_HelloSwingModal extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					J11_HelloSwingModal frame = new J11_HelloSwingModal();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public J11_HelloSwingModal() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);

		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);

		JMenu mnFilef = new JMenu("File (F)");
		menuBar.add(mnFilef);

		JMenuItem mntmExit = new JMenuItem("exit");
		mnFilef.add(mntmExit);

		JMenu mnHelph = new JMenu("Help (H)");
		menuBar.add(mnHelph);

		JMenuItem mnProjectInfo = new JMenuItem("project info");
		mnProjectInfo.addActionListener(new MenuActionListener(this));
		mnHelph.add(mnProjectInfo);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);

	}

}

class MenuActionListener implements ActionListener {
	private JFrame p = null;

	public MenuActionListener(JFrame p) {
		this.p = p;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		new SwingDialog(p);

		JDialog d = new JDialog(p, Dialog.ModalityType.MODELESS);
		// Dialog.ModalityType.DOCUMENT_MODAL
		// Dialog.ModalityType.APPLICATION_MODAL

		d.setSize(250, 250);
		d.setVisible(true);
		// super(parent,Dialog.ModalityType.MODELESS); //부모창과 모달창 여부

	}
}

class SwingDialog extends JDialog {
	public SwingDialog(JFrame parent) {
		super(parent, false); // 부모창과 모달창 여부

		setBounds(300, 300, 250, 120);
		setTitle("Project About");
		setVisible(true);
		setModal(false);
		setModalityType(DEFAULT_MODALITY_TYPE);
	}
}
